package com.wugh.fast.kernel.core.enums;

import lombok.Getter;
import lombok.ToString;

import java.util.Arrays;
import java.util.Objects;
import java.util.Optional;

/**
 * 描述:异常枚举
 * <pre>
 *      0:             成功
 *      1~499:         fast框架自身异常,如工具报错
 *      500~999:       自定义框架异常,
 *      1000~2999:     业务异常
 *      9999:          未处理异常
 * </pre>
 *
 * @author wugh
 * @date 2019-01-18 18:24
 */
@ToString
@Getter
public enum FastExceptionEnum implements EnumInterface<Integer> {
    /**
     * 0: 成功
     */
    SUCCESS(0, "成功"),
    /**
     * 499: fast框架全局异常异常
     */
    FAST_GLOBAL_EXCEPTION(499, "fast框架全局异常异常"),
    /**
     * 1000: 参数异常
     */
    PARAMETER_EXCEPTION(1000, "参数错误"),
    /**
     * 1001: 数据不存在
     */
    DATA_NOT_EXIST_EXCEPTION(1001, "数据不存在"),
    /**
     * 1002: 数据异常
     */
    DATA_ABNORMAL_EXCEPTION(1002, "数据异常"),
    /**
     * 2999: 全局业务异常
     */
    GLOBAL_BUSINESS_EXCEPTION(2999, "全局业务异常"),
    /**
     * 9999: 未处理异常
     */
    UNHANDLED_EXCEPTION(9999, "未处理异常"),
    ;

    private Integer code;
    private String desc;

    FastExceptionEnum(int code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    /**
     * 根据枚举值查找枚举对象
     *
     * @param code
     * @return
     */
    public static Optional<FastExceptionEnum> searchByCode(int code) {
        FastExceptionEnum[] values = FastExceptionEnum.values();
        for (FastExceptionEnum value : values) {
            if (Objects.equals(value.getCode(), code)) {
                return Optional.of(value);
            }
        }
        return Optional.empty();
    }

    /**
     * 获取枚举的code数组
     *
     * @return
     */
    public static String[] getCodeArray() {
        return Arrays.stream(FastExceptionEnum.values()).map(FastExceptionEnum::getCode).map(Object::toString).toArray(String[]::new);
    }
}
